/**
 * @file io.c
 * @author cty (you@domain.com)
 * @brief 
 * @version 0.1
 * @date 2024-04-09
 * 
 * @copyright Copyright (c) 2024
 * 
 */

#ifndef __IO_H__
#define __IO_H__

#include "main.h"
#include "at32f435_437_gpio.h"

struct pin_id
{
    uint32_t GPIOx;
    uint32_t PINx;
};

const struct pin_id pins[] = 
{
    {(uint32_t)LED2_PORT, (uint32_t)LED2_PIN},
    {(uint32_t)LED3_PORT, (uint32_t)LED3_PIN}
};

const uint8_t pin_num = 2;

void pin_init()
{
    gpio_init_type gpio_init_struct;
    gpio_default_para_init(&gpio_init_struct);

    /* configure the gpio */
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
    gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
    gpio_init_struct.gpio_pins = LED2_PIN | LED3_PIN;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init(LED2_PORT, &gpio_init_struct);
}

void pin_set(uint8_t id)
{
    if(id < pin_num)
    {
        gpio_bits_set((gpio_type*)pins[id].GPIOx, pins[id].PINx);
    }
}

void pin_reset(uint8_t id)
{
    if(id < pin_num)
    {
        gpio_bits_reset((gpio_type*)pins[id].GPIOx, pins[id].PINx);
    }
}


#endif  /* __IO_H__ */

